package com.qf.boot2203.controller;
import com.baomidou.kaptcha.Kaptcha;
import com.qf.boot2203.entity.User;
import com.qf.boot2203.service.UserService;
import com.qf.boot2203.utils.Constants;
import com.qf.boot2203.vo.ResultVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/user")
@Slf4j
public class LoginController {

    @Autowired
    Kaptcha kaptcha;

    @Autowired
    UserService userService;

    @PostMapping("login")
    public ResultVo codeValid(String username, String password, String captchar, String freelogin,
                              HttpSession session, HttpServletResponse response){

        log.debug("接口入参为:username={},password={},captchar={},freelogin={}", username, password, captchar, freelogin);

        kaptcha.validate(captchar);

        //2. 查询数据库验证用户名和密码是否匹配
        // 如何设计service层的方法
        // （1） 要把处理业务逻辑所需要的参数都传给该方法
        //  (2) 返回值设计要满足 web接口返回json数据的需求
        User user = userService.login(username,password);

        //3. 根据user是否为null判断登录状态并返回json
        if (user==null){
            // 用户名密码错误导致的登录失败
//            return new ResultVo(-1,"用户名密码错误");
            return ResultVo.error("用户名密码错误");
        }else {
            // 登录成功
            final ResultVo vo = ResultVo.ok();
            vo.put("data",user);

            // 如何保存用户的登录状态
            // 需要在后续的请求到达时，能够判断出发请求的浏览器是否曾经登录过
            session.setAttribute(Constants.USER_SESSION_KEY, user);

            if (freelogin != null && freelogin.equals("on")) {
                //设置cookie
                String userInformation = username + "/" + password;
                Cookie cookie = new Cookie(Constants.USER_COOKIE_KEY, userInformation);
                //设置存活时间
                cookie.setMaxAge(60 * 60 * 24 * 14);
                cookie.setPath("/"); //代表cookie是当前应用网站最上级的cookie
                //将cookie加入到浏览器中
                response.addCookie(cookie);
            }

            return vo;

        }

    }

}
